/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package shaman.storage.common;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author dmitriy
 */

@XStreamAlias("properties")
public class FilePropertiesStorage implements FilePropertiesAccessor {

    private final Map<String, String> properties=new HashMap<String, String>();
    private transient boolean immutable=true;

    public FilePropertiesStorage() {
    }

    public FilePropertiesStorage(boolean mutable) {
        immutable=!mutable;
    }

    public Map<String, String> getProperties() {
        return Collections.unmodifiableMap(properties);
    }

    public String getProperty(String name) {
        return properties.get(name);
    }

    /**
     * Является ли данный объект свойств неизменяемым
     * @return
     */
    public boolean isImmutable() {
        return immutable;
    }

    /**
     * Устанавливает данный объект свойств как неизменяемый
     */
    public synchronized void setImmutable() {
        immutable = true;
    }

    public synchronized void setProperty(String name, String value) {
        if (immutable) {
            throw new IllegalStateException("The object is immutable");
        }
        properties.put(name, value);
    }

}
